独立验证
创建验证
任何时候,都可以直接使用think\Validate类而不需要定义验证器类进行独立的验证操作,例如:
$validate = Validate::make(['name' => 'require|max:25','email' => 'email']);$data = ['name' => 'thinkphp','email' => 'thinkphp@qq.com'];if (!$validate->check($data)) {dump($validate->getError());}
make方法直接传入验证规则(数组),check方法传入需要验证的数据(数组)。
设置规则
也可以使用rule方法设置单个或者批量验证规则,例如:
Validate::make()->rule('zip', '/^\d{6}$/')->rule('email', 'email')->check($data);
支持数组方式
Validate::make()->rule(['zip' => '/^\d{6}$/', 'email' => 'email'])->check($data);
验证规则可以使用think\validate\ValidateRule对象定义
Validate::make()->rule('zip', ValidateRule::regex('/^\d{6}$/'))->rule('email', ValidateRule::must()->isEmail())->check($data);
ValidateRule类可以静态化调用所有的内置验证方法(支持二个参数:验证规则和错误信息)
下面是指定错误信息及验证字段的名称示例:
Validate::make()->rule('zip', ValidateRule::regex('/^\d{6}$/', '邮编错误'))->rule('email', ValidateRule::must()->isEmail()->title('邮箱'))->rule('name', ValidateRule::min(5, '最少5个字符')->max(20, '不得超过20个字符'))->check($data);
同样在数组方式中也支持:
Validate::make()->rule(['zip' => ValidateRule::regex('/^\d{6}$/'),'email' => ValidateRule::email(),])->check($data);
验证数据
下面是一个典型的验证数据的例子:
$rule = ['name' => 'require|max:25','age' => 'number|between:1,120','email' => 'email',];$msg = ['name.require' => '名称必须','name.max' => '名称最多不能超过25个字符','age.number' => '年龄必须是数字','age.between' => '年龄只能在1-120之间','email' => '邮箱格式错误',];$data = ['name' => 'thinkphp','age' => 10,'email' => 'thinkphp@qq.com',];$validate = Validate::make($rule,$msg);$result = $validate->check($data);if(!$result) {dump($validate->getError());}
如果需要批量验证,可以使用:
$result = Validate::make($rule,$msg)->batch()->check($data);
批量验证如果验证不通过,返回的是一个错误信息的数组。
闭包验证
可以对某个字段使用闭包验证,例如:
$validate = Validate::make(['name' => function($value,$rule) {return $rule==$value ? true : false;},])->check($data);
自定义验证规则
独立验证的时候支持使用extend方法动态注册验证规则,例如:
Validate::extend('checkName', function ($value, $rule) {return $rule == $value ? true : '名称错误';});$validate = Validate::make(['name' => 'checkName:1']);$data = ['name' => 1];$validate->check($data);
支持批量注册验证规则,例如:
Validate::extend(['checkName'=> function ($value, $rule) {return $rule == $value ? true : '名称错误';},'checkStatus'=> [$this,'checkStatus']]);$validate = Validate::make(['name' => 'checkName:1'])$data = ['name' => 1];$validate->check($data);
设置字段信息
验证类的架构方法支持传入field参数批量设置字段的描述信息,例如:
$rule = ['name' => 'require|max:25','age' => 'number|between:1,120','email' => 'email',];$field = ['name' => '名称','age' => '年龄','email' => '邮箱',];$data = ['name' => 'thinkphp','age' => 10,'email' => 'thinkphp@qq.com',];$validate = Validate::make($rule, [], $field);$result = $validate->check($data);
错误提示信息
如果要使用自定义的错误信息,可以使用message方法:
$rule = ['name' => 'require|max:25','age' => 'number|between:1,120','email' => 'email',];$msg = ['name.require' => '名称必须','name.max' => '名称最多不能超过25个字符','age.number' => '年龄必须是数字','age.between' => '年龄必须在1~120之间','email' => '邮箱格式错误',];$data = ['name' => 'thinkphp','age' => 121,'email' => 'thinkphp@qq.com',];$validate = Validate::make($rule)->message($msg);$result = $validate->check($data);if(!$result){echo $validate->getError();}
会输出 年龄必须在1~120之间。
如果需要使用多语言验证信息,可以在定义验证信息的时候使用 {%语言变量} 替代 原来的验证错误信息,例如:
$rule = ['name' => 'require|max:25','age' => 'number|between:1,120','email' => 'email',];$msg = ['name.require' => '{%name_require}','name.max' => '{%name_max}','age.number' => '{%age_number}','age.between' => '{%age_between}','email' => '{%email_error}',];$data = ['name' => 'thinkphp','age' => 121,'email' => 'thinkphp@qq.com',];$validate = Validate::make($rule)->message($msg);$result = $validate->check($data);if(!$result){echo $validate->getError();}